package cliente.varejo;

import interfaces.varejo.IVarejo;

import java.io.Serializable;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import javax.swing.JTextArea;

import apoio.Tipos.Tipo;
import atacado.IRespostaServidorAtacado;

/**
 * Representa um cliente no varejo
 * @author Emerson Shigueo Sugimoto
 * */
public class ClienteVarejo implements Serializable {
	private static final long serialVersionUID = 4091592202497715739L;
	private IVarejo _ivare;
	private VisualCheckerCallBack _checker;
	private int _idProduto, _quantidade;
	private JTextArea _jta;
	private String _ip, _nomeServico;
	private int _porta;
	private IRespostaServidorAtacado _irsa;
	private Tipo _tipoProduto;
	private Tipo _meuTipo;
	private boolean _isPrioridadeReputacao;
	
	public boolean isPrioridadeReputacao() {return _isPrioridadeReputacao;}
	public void setPrioridadeReputacao(boolean isPrioridadeReputacao) {this._isPrioridadeReputacao = isPrioridadeReputacao;}
	public Tipo getMeuTipo() {return _meuTipo;}
	public void setMeuTipo(Tipo meuTipo) {this._meuTipo = meuTipo;}
	public Tipo getTipoProduto() {return _tipoProduto;}
	public void setTipoProduto(Tipo tipoProduto) {this._tipoProduto = tipoProduto;}
	public IRespostaServidorAtacado getIrsa() {return _irsa;}
	public void setIrsa(IRespostaServidorAtacado irsa) {this._irsa = irsa;}
	public void setNomeServico(String nomeServico) {this._nomeServico = nomeServico;}
	public String getNomeServico() {return _nomeServico;}
	public void setPorta(int porta) {this._porta = porta;}
	public int getPorta() {return _porta;}
	public void setChecker(VisualCheckerCallBack checker) {this._checker = checker;}
	public VisualCheckerCallBack getChecker() {return _checker;}
	public void setIntVar(IVarejo msg) {this._ivare = msg;}
	public IVarejo getIntVar() {return _ivare;}
	public void setIp(String ip) {this._ip = ip;}
	public String getIp() {return _ip;}
	public void setJta(JTextArea jta) {this._jta = jta;}
	public JTextArea getJta() {return _jta;}
	public void setIdProduto(int idProduto) {this._idProduto = idProduto;}
	public int getIdProduto() {return _idProduto;}
	public void setQuantidade(int quantidade) {this._quantidade = quantidade;}
	public int getQuantidade() {return _quantidade;}
	
	/**
	 * construtor
	 * */
    public ClienteVarejo(String ip, int porta, String nomeServico) 
    							 throws RemoteException, NotBoundException {
    	setIp(ip);
    	setPorta(porta);
    	setNomeServico(nomeServico);
    }
    
    /**
     * inicio
     * */
    public void iniciar() throws RemoteException, NotBoundException {
    	print("Criando cliente varejo ["+getIp()+":"+getPorta()+" - "+getNomeServico()+"]");
        final Registry registry = LocateRegistry.getRegistry(getIp(), getPorta()); /*ip, porta*/
        setIntVar((IVarejo) registry.lookup(getNomeServico()));
        setChecker(new VisualCheckerCallBack(getIntVar(), getJta()));
        //espera o call back
        getIntVar().Comprar(
        		getChecker(), 
        		/*getIrsa(),*/
        		getTipoProduto(), 
        		getIdProduto(), 
        		getQuantidade(), 
        		getMeuTipo(), 
        		isPrioridadeReputacao()
        );
    }
    
    private void print(String msg){
    	if (getJta()==null){System.out.println(msg);return;}
    	getJta().setText(msg + "\n" + getJta().getText());
    }
    
}